perm filename CONVHE.SAI[PIC,HE] blob
sn#428037 filedate 1979-03-15 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN
C00006 ENDMK
C⊗;
BEGIN
REQUIRE "ABBREV.SAI" SOURCE!FILE ;
REQUIRE "<>{}" DELIMITERS ;
DEFINE ASKI(IVAR,STR) = <
PSOUT(STR);
IVAR← CVD(INCHWL);> ;
DEFINE IWAIT = <OUTSTR("WAITING FOR RETURN");
INCHWL;> ;
INTEGER IBITS,OBITS,NLINES,INWORDS,OUTWORDS,LINLEN,OPIX,IPIX;
INTEGER ILINLEN ;
BOOLEAN TOSCALE ;
STRING STR ;
IBITS← 8 ;
ASKI(NLINES, "NO OF LINES:IN THE INPUT PICTURE");
ASKI(OBITS, "NO OF BITS IN THE OUTPUT PICTURE:");
ILINLEN ← NLINES DIV (36 DIV IBITS);
IF (NLINES MOD (36 DIV IBITS)) NEQ 0 THEN
ILINLEN ← ILINLEN + 1;
INWORDS ← NLINES * ILINLEN;
OPIX← 36 DIV OBITS ;
LINLEN ← NLINES DIV OPIX;
IF (NLINES MOD OPIX) NEQ 0 THEN LINLEN ← LINLEN + 1;
OUTWORDS ← NLINES * LINLEN ;
PSOUT("SCALE THE PICTURE?");
STR ← INCHWL ;
TOSCALE← IF (STR= "Y") OR (STR = "y") THEN TRUE ELSE FALSE ;
BEGIN "IN"
INTEGER VAL, VALMAX, VALMIN ;
INTEGER ICH,OCH,BYTEPTR,OBYTEPTR,I,J,NVAL ;
REAL SCALE ;
INTEGER ARRAY INARRY[1:INWORDS],OUTARRY[1:OUTWORDS] ;
INTEGER ARRAY DUMMY[1:141];
LABEL L1,L2,L3,L4,L5,L6;
L1: IWAIT;
COMMENT FIRST READ THE 8 BIT PACKED IMAGE ;
OUTSTR("INPUT FILE:");
ICH ← OPENFILE("","RC");
ARRYIN (ICH, INARRY[1],INWORDS);
IF TOSCALE THEN BEGIN
L2:IWAIT ;
COMMENT NOW FIND THE MAX AND THE MIN ;
BYTEPTR ← POINT(IBITS,INARRY[1],-1);
VALMAX ← VALMIN ← 0 ;
FOR I ← 1 STEP 1 UNTIL NLINES * NLINES DO
BEGIN
VAL ← ILDB(BYTEPTR) ;
VALMAX ← VALMAX MAX VAL ;
VALMIN ← VALMIN MIN VAL ;
END ;
OUTSTR("MAXVAL IS "&CVS(VALMAX)&CRLF);
OUTSTR("MINVAL IS "&CVS(VALMIN)&CRLF);
L3:IWAIT;
SCALE ← (2 ↑ OBITS) /(VALMAX - VALMIN) ;
END ;
BYTEPTR ← POINT(IBITS,INARRY[1],-1);
FOR I ← 1 STEP 1 UNTIL NLINES DO
BEGIN
OBYTEPTR ← POINT (OBITS,OUTARRY[LINLEN*(I-1)+1],-1);
FOR J ← 1 STEP 1 UNTIL NLINES DO
BEGIN
VAL ← ILDB(BYTEPTR) ;
NVAL ← (IF TOSCALE THEN (VAL - VALMIN) * SCALE
ELSE VAL );
IDPB(NVAL,OBYTEPTR) ;
END ;
END ;
L4:IWAIT;
OUTSTR("OUTPUT FILE:");
OCH ← OPENFILE("","WC");
COMMENT FIRST OUTPUT THE HEADER;
WORDOUT(OCH,-1);
WORDOUT(OCH,OBITS);
WORDOUT(OCH,LINLEN);
WORDOUT(OCH,1);
WORDOUT(OCH,NLINES);
WORDOUT(OCH,1);
WORDOUT(OCH,NLINES);
WORDOUT(OCH, ((-OUTWORDS) LSH 18) + '200);
ARRYOUT(OCH,DUMMY[1],120);
ARRYOUT(OCH,OUTARRY[1],OUTWORDS);
L5:IWAIT;
CFILE(ICH);
CFILE(OCH);
END "IN" ;
END ;